/**
 * @file orderSlice.js
 * @description 用户订单状态的 Redux slice。
 */
import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  orders: [],       // 当前用户的订单列表
  isLoading: false,
  error: null,
};

const orderSlice = createSlice({
  name: 'orders',
  initialState,
  reducers: {
    /**
     * 开始加载订单。
     * @param {object} state - 当前的 state。
     */
    loadOrdersStart: (state) => {
      state.isLoading = true;
      state.error = null;
    },
    /**
     * 订单加载成功。
     * @param {object} state - 当前的 state。
     * @param {object} action - Redux action，action.payload 应该是订单数组。
     */
    loadOrdersSuccess: (state, action) => {
      state.isLoading = false;
      state.orders = action.payload;
    },
    /**
     * 订单加载失败。
     * @param {object} state - 当前的 state。
     * @param {object} action - Redux action，action.payload 应该是错误信息。
     */
    loadOrdersFailure: (state, action) => {
      state.isLoading = false;
      state.error = action.payload;
    },
    /**
     * 清除订单状态 (例如用户登出时)。
     * @param {object} state - 当前的 state。
     */
    clearOrders: (state) => {
      state.orders = [];
      state.isLoading = false;
      state.error = null;
    }
  },
});

export const {
  loadOrdersStart,
  loadOrdersSuccess,
  loadOrdersFailure,
  clearOrders
} = orderSlice.actions;

/**
 * 异步 action creator 用于加载当前用户的订单。
 * @param {string|number} userId - 当前登录用户的ID。
 * @returns {Function} 一个 thunk 函数。
 */
export const fetchUserOrders = (userId) => async (dispatch) => {
  if (!userId) {
    dispatch(loadOrdersFailure("用户ID未提供，无法加载订单。"));
    return;
  }
  dispatch(loadOrdersStart());
  try {
    // 模拟从 localStorage 获取订单
    const allOrders = JSON.parse(localStorage.getItem('userOrders')) || [];
    const userSpecificOrders = allOrders.filter(order => order.userId === userId);

    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 500)); 

    dispatch(loadOrdersSuccess(userSpecificOrders));
  } catch (error) {
    console.error("加载用户订单失败:", error);
    dispatch(loadOrdersFailure(error.toString()));
  }
};

export default orderSlice.reducer;